pxAddForce(body%, vx#, vy#, vz#, mode%)

Параметры

body% - физическое тело
vx#, vy#, vz# - вектор приложения силы
mode% - тип силы

Описание

Прикладывает к центру тяжести тела силу в глобальной системе координат.
Mode - может принимать только целые значения от 0 до 5.
0 - прикладывает просто силу, имеет единицу измерения масса*дистанция/время^2.
1 - прикладывает импульс, имеет единицу измерения масса*дистанция/время.
2 - изменение скорости, имеет единицу измерения дистанция/время.
3 - сглаженный импульс (SMOOTH IMPULSE ), используется в конкретных случаях.
4 - сглаженное изменение скорости (SMOOTH VELOCITY CHANGE), используется в конкретных случаях.
5 - ускорение, имеет единицу измерения дистанция/время^2.
Внимание - силу нельзя прикладывать к статическим (с массой 0) и управляемым телам.

Смотрите так же

pxAddLocalForce
    Команды группы:
pxAddForceAtLocalPos, pxAddForceAtPos

Пример

;Пример применения функции
;pxAddForce

;в примере нам понадобится несколько однотипных тел
Type Px_Cylinder
    Field body%
    Field mesh%
End Type

Graphics3D 800, 600, 32, 2
SetBuffer BackBuffer()

;Создаем физический мир, устанавливаем гравитацию.
pxCreateWorld(1) ;У нас будет поверхость
pxSetGravity(0, -10, 0)

camera=CreateCamera()
light=CreateLight()
PositionEntity camera,0,20,-40
RotateEntity camera,30,0,0

plane=CreatePlane() ;Физуализируем поверхость
EntityColor plane,0,100,200
EntityAlpha plane,0.5

mir = CreateMirror () ;Чуть украсим зеркалом

;Добавим объектов к сцене
For n = 1 to Rnd(10,40)
    ocu.Px_Cylinder = New Px_Cylinder

    ocu\mesh = CreateCylinder()    ;Создаем визуальное отображение
    ScaleEntity ocu\mesh,1,3,1    ;зададим размер
    EntityColor ocu\mesh,Rand(0,255), Rand(0,255), Rand(0,255) ;и цвет

    ocu\body=pxCreateCylinder( 1, 3, 8, 1) ;Создаем физический объект
    pxSetPosition(ocu\body,Rand(-20,20),40,Rand(-10,30)) ;размещаем случайным образом
    pxSetRotation(ocu\body,Rand(-50,50),Rand(-50,50),Rand(-50,50))

Next

body1 = pxCreateCube( 1, 1, 1, 20)
pxSetPosition(body1,0,3,0)
mesh1 = CreateCube()
EntityColor mesh1,255, 0, 0

body2 = pxCreateCube( 1, 1, 1, 20)
pxSetPosition(body2,0,9,0)
mesh2 = CreateCube()
;Создаем соединение "спица"
pxJCreateCylindrical(body1, body2, 0, 6, 0, 0, 1, 0, -20, 20)
;Создаем пружину
pxCreateSpringAndDamperEffector(body1, body2)

mode% = 0 ;Поиграем с типом силы
Force# = 2000 ; сила с которой будем давить
;Основной цикл программы
While Not KeyDown(1) ;Пока не нажат ESC

    RenderPhysic(60,0)

; ------------ Применяем pxAddForce
;Применяем силы в зависимости от нажатой клавиши
    If KeyDown(200) pxAddForce(body1,0,0,Force,mode)
    If KeyDown(208) pxAddForce(body1,0,0,-Force,mode)
    If KeyDown(205) pxAddForce(body1,Force,0,0,mode)
    If KeyDown(203) pxAddForce(body1,-Force,0,0,mode)

    If KeyHit(57) Then
        mode = mode+1
        If mode = 6 Then mode = 0
        Select mode
        Case 0
            Force# = 2000
        Case 5
            Force# = 200
        Default
            Force# = 20
        End Select
    EndIf

;Обновим положения всех объектов
    For ocu.Px_Cylinder = Each Px_Cylinder
        pxSetEntity(ocu\mesh, ocu\body)
    Next
    pxSetEntity(mesh1,body1)
    pxSetEntity(mesh2,body2)

; UpdateWorld
    RenderWorld
    Text 10,10,"Клавиши управления - прикладывают силу к красному кубику"
    Text 10,20,"Пробел - изменяет тип прикложеной силы"
    Text 10,30,"Текущий тип силы "+ mode
    Text 10,40,"Приложено силы "+ Force

    Flip
    Wend

End

К содержанию

Нажмите здесь чтобы увидеть последнюю версию этой странички в режиме online.